# Given imports

Для большей ясности, откуда берутся данные в текущей области видимости, 
для импорта экземпляров `given` используется специальная форма оператора `import`. 
Базовая форма показана в этом примере:

```dotty
object A:
  class TC
  given tc: TC = ???
  def f(using TC) = ???

object B:
  import A.*       // импорт всех non-given членов
  import A.given   // импорт given членов
```

В этом коде предложение `import A.*` объекта `B` импортирует все элементы `A`, кроме `given` экземпляра `tc`. 
И наоборот, второй импорт, `import A.given`, импортирует только экземпляр `given`. 
Два предложения импорта также могут быть объединены в одно:

```dotty
object B:
  import A.{given, *}
```

### Обсуждение

Селектор с подстановочным знаком `*` помещает в область видимости все определения, кроме givens или расширений, 
тогда как селектор `given` помещает в область видимости все givens, включая те, которые являются результатом расширений.

Эти правила имеют два основных преимущества:

- понятнее, откуда берутся данные в текущей области видимости. 
В частности, невозможно скрыть импортированные givens в длинном списке других импортов.
- есть возможность импортировать все given, не импортируя ничего другого. 
Это важно, потому что givens могут быть анонимными, поэтому обычное использование именованного импорта нецелесообразно.

Дополнительные примеры синтаксиса "import given" показаны в главе ["Пакеты и импорт"](../packaging.md).


---

**Ссылки:**

- [Scala3 book](https://docs.scala-lang.org/scala3/book/ca-given-imports.html)
